/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package prova.problemaJosephus;

import utils.problemaJosephus.LlistaEnllacada;
import utils.problemaJosephus.Iterador;
import java.awt.Button;
import java.awt.Color;
import java.awt.Label;
import java.awt.TextField;
import java.awt.event.ActionEvent;

/**
 *
 * @author Monica
 */
public class Main extends java.awt.Frame {
    private Button butReinicia;

    public Main() {
        initComponents();}

   /**
    * declarem les variables globals
    */
    String bo;
    int contador, num;
    boolean estat = false;
    LlistaEnllacada list = new LlistaEnllacada();
    Iterador iter = new Iterador(list);

    /**
     * inicialitzem els components
     */
    private void initComponents() {
        labNumElim = new Label();
        labNomPers = new Label();
        labMtge = new Label();
        labGuanya = new Label();
        TxtNomsPers = new TextField();
        TxtNumPers = new TextField();
        butAltaPers = new Button();
        butMata = new Button();
        butReinicia = new Button();
    /**
     * inicialitzem la finestra o formulari
     */
        setLayout(null);
        setBackground((java.awt.Color) javax.swing.UIManager.getDefaults().get("Button.background"));
        setTitle("El Problema de Josephus ");
        addWindowListener(new java.awt.event.WindowAdapter() {
            public void windowClosing(java.awt.event.WindowEvent evt) {
                exitForm(evt);
            }
        });
        /**
         * definim els components
         * primer, les labels que ens mostren els titols
         * després, la label que dona el missatge mentre s'executa i la label que ens mostra el guanyador
         */
        labNumElim.setText("  Posa aquí el numero de l'ordre d'eliminació");
        add(labNumElim);
        labNumElim.setBounds(50, 50, 255, 20);
        labNumElim.setBackground(Color.yellow);

        labNomPers.setText("Posa aquí el nom dels personatges un per un");
        add(labNomPers);
        labNomPers.setBounds(50, 110, 255, 20);
        labNomPers.setBackground(Color.yellow);

        add(labMtge);
        labMtge.setBounds(50, 220, 260, 20);
        labMtge.setBackground(Color.magenta);

        add(labGuanya);
        labGuanya.setBounds(50, 250, 260, 20);
        labGuanya.setBackground(Color.magenta);
        /**
         * donem d'alta els botons per inserir el nom de les persones, per matar i per reiniciar
         * creem els procediments per l'event click
         */
        butAltaPers.setLabel("Alta jugador");
        butAltaPers.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                butAltaPersActionPerformed(evt);
            }
        });

        add(butAltaPers);
        butAltaPers.setBounds(55, 380, 90, 24);
        /**
         * creem les textfield, per introduir l'ordre en que volem matar i el nom de les persones
         */
        add(TxtNumPers);
        TxtNumPers.setBounds(150, 80, 40, 20);


        add(TxtNomsPers);
        TxtNomsPers.setBounds(60, 140, 220, 20);

        butMata.setLabel("Matar");
        butMata.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                butMataActionPerformed(evt);
            }
        });

        add(butMata);
        butMata.setBounds(155, 380, 70, 24);

        butReinicia.setLabel("Reiniciar");
        butReinicia.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                butReiniciaActionPerformed(evt);
            }
        });

        add(butReinicia);
        butReinicia.setBounds(240, 380, 70, 24);

        pack();
        java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
        setSize(360, 500);
        setLocation((screenSize.width-360)/2,(screenSize.height-500)/2);
    }

    /**
     *
     * @param evt
     * event click, dona d'alta a la llista nom a nom i click a click les persones que volen jugar
     */
    private void butAltaPersActionPerformed(java.awt.event.ActionEvent evt) {
        Object ob;
        ob = TxtNomsPers.getText();

        if(ob.equals("")){
        labMtge.setText("Ha d'escriure un nom");
        }
        else{
          labMtge.setText("");
            if(estat==false){
            iter.insertar(ob);
            estat=true;
            }
            else{
            iter.insertar(ob);
            }
           contador++;
           TxtNomsPers.setText("");
        }
    }

    /**
     *
     * @param evt
     * event click que elimina de la llista el nom que estigui a la posició que toqui segons els salts insertats a TxtNumPers
     */
    private void butMataActionPerformed(java.awt.event.ActionEvent evt) {
      bo = TxtNumPers.getText();

      if(list.capcalera.seguent==null){}

      else{
        if(bo.equals("")){
          labMtge.setText("Ha d'escriure un numero");
        }

        else{
           num = Integer.parseInt(bo);
           TxtNumPers.setEditable(false);
           TxtNomsPers.setEditable(false);
           iter.eliminar(num);
           if(iter.mort!=null){
             labMtge.setText("Ha mort "+String.valueOf(iter.mort));
           }
           if(iter.viu!=null){
             labGuanya.setText("Ha sobreviscut "+String.valueOf(iter.viu));
           }
        }
      }
    }

    /**
     *
     * @param evt
     * event click que reinicia la partida
     */
    private void butReiniciaActionPerformed(ActionEvent evt) {
               new Main().show();
            }

    /**
     *
     * @param evt
     * event click que surt de l'aplicació amb el botó (X)
     */
    private void exitForm(java.awt.event.WindowEvent evt) {
        System.exit(0);
    }

   /**
    *
    * @param args
    * Funció principal
    */
    public static void main(String args[]) {
        new Main().show();
    }//Fi procediment main


    /**
     * Declaració de variables (components)
     */
    private java.awt.Button butAltaPers;
    private java.awt.Button butMata;
    private java.awt.TextField TxtNumPers;
    private java.awt.TextField TxtNomsPers;
    private java.awt.Label labNomPers;
    private java.awt.Label labNumElim;
    private java.awt.Label labMtge;
    private java.awt.Label labGuanya;
    //fi de declaració de variables

}
